/*
 * AFrame 的 asset 管理模块
 * @author Zdream
 * @since 0.2.0
 */

/*
 * 资源管理部分
 */
m_data.a = {
		
	/*
	 * 请求资源, 对外开放函数
	 */
	requireAssetInModule : function(module) {
		if (module.require != null && m_data.fRequireAssets != null) {
			var r;
			
			if (typeof(module.require) == 'function') {
				r = module.require();
			} else {
				r = module.require;
			}
			
			for (var i = 0; i < r.length; i++) {
				var o = r[i];
				try {
					switch (o.type) {
					case "image":
						this.image.requireImage0(r, i);
						break;
					case "path":
						this.path.requirePath(r, i);
						break;
					}
				} catch (o) {
					console.error("模块 " + module.name + " 的下面的资源请求格式不合法:");
					console.error(o);
				}
			}
		}
	},
	
	/**
	 * 请求矢量图资源数据, 对外开放函数
	 * @param name
	 *   asset.name
	 * @return
	 *   相应的数据, 可能为 null. 请不要修改里面的数据
	 */
	getPathValue : function (name) {
		return this.path.datas[name];
	},
	
	/**
	 * 拼接成 image 的最终获取的 path
	 */
	createImagePath : function (path) {
		return m_data.config.mapUrl + path;
	},

	/*
	 * 矢量图部分
	 */
	path : {
		/*
		 * 存储数据
		 */
		datas : {},
		
		/**
		 * 如果格式不合法, 抛异常
		 * @param array
		 *   module.require 形成的列表
		 */
		requirePath : function(array, index) {
			var o = array[index];
			if (o.name == null || o.name == "") {
				throw o;
			}
			
			if (this.datas[o.name] != null) {
				o.data = this.datas[o.name];
			} else {
				m_data.fRequireAssets(o, function(data) {
					m_data.a.path.datas[o.name] = data;
					o.data = data;
				});
			}
		}
	},

	/*
	 * 图像部分
	 */
	image : {
		/*
		 * 存储数据, name - object
		 * 键为 string Name
		 * 值为 object
		 * {
		 *   path: 路径, string
		 * }
		 */
		datas : {},
		
		/**
		 * 如果格式不合法, 抛异常
		 * @param array
		 *   module.require 形成的列表
		 */
		requireImage0 : function(array, index) {
			var o = array[index];
			this.requireImage(o.name);
		},
		
		/**
		 * 向外开放的方法
		 * @param name
		 * @return object 或 null
		 *   当现在没有缓存该图像数据时, 返回 null, 后面需要监听 "access-image-path" 事件获取;
		 *   如果已经有缓存, 返回缓存的数据, 一般只含 path
		 */
		requireImage : function (name) {
			if (name == null || name == "") {
				throw name;
			}
			
			if (this.datas[name] == null) {
				m_data.fRequireAssets({type : "image", name : name}, function(data) {
					var path = data.data.path;
					var d = {
						path: path
					}
					
					// 以下就是用于缓存图片的, 用于浏览器控制
					var img = new Image();
					img.src = m_data.config.mapUrl + path;
					
					m_data.a.image.datas[name] = d;
					m_data.e.release(
						"access-image-path",
						{
							name : name,
							path : path
						}
					);
				});
			} else {
				return this.datas[name];
			}
		}
	},
	
}